-- gameInfoCollector.lua 游戏信息收集脚本
-- 负责收集游戏内的各种信息：金币、钻石、角色等级、职业、三防、背包信息、公会名、当前挂机地图等

local M = {}

-- 导入TURING模块
local TURING = require("TURING")

-- 导入文字识别库
local textRecognition = require('Config.TextRecognition1')
local text_recognition_bag = require('Config/TextRecognition2').文字识别库_背包
local text_recognition_bag_weight = require('Config/TextRecognition2').文字识别库_背包负重
-- 导入Tools模块
local Tools = require('./Tools')

-- 游戏信息结构
local gameInfo = {
    gold = 0,           -- 金币数量
    diamond = 0,        -- 钻石数量
    level = 0,          -- 角色等级
    profession = "",    -- 角色职业
    hit = 0,            -- 角色命中
    defense = 0,        -- 角色防御
    bag = {             -- 背包信息
        available = 0,  -- 可用格子数
        total = 0       -- 总格子数
    },
    bagWeight = 0,      -- 背包负重
    guild = "",         -- 公会名
    currentMap = "",    -- 当前挂机地图
    lastUpdateTime = 0  -- 最后更新时间
}

-- 修复：使用正确的文字识别库引用
local text_recognition_lib = textRecognition.文字识别库
-- 初始化游戏信息收集器
function M.init()
    -- print("[INFO] 游戏信息收集器初始化")
    -- M.collectAllInfo()
    -- return true
end

-- 收集所有游戏信息
function M.collectAllInfo()
    print("[DEBUG] 开始收集游戏信息...")
    
    -- 收集基础信息
    M.collectBasicInfo()
    
    -- 收集角色信息
    M.collectCharacterInfo()
  
    -- 收集公会信息
    --M.collectGuildInfo()
    
    -- 收集地图信息
   -- M.collectMapInfo()
    
    -- 更新最后收集时间
    gameInfo.lastUpdateTime = os.time()
    
    print("[DEBUG] 游戏信息收集完成")
end
function M.Test()
  
end
-- 收集基础信息（金币、钻石等）
function M.collectBasicInfo()
    -- print("[DEBUG] 收集基础信息...")
    Tools.click_button("打开背包按钮", "打开背包按钮", 1, 1106,16,1132,46, "0-185", 2, 5, require('Config.TextRecognition1').文字识别库_背包, 75)
    sleep(500)
    
    -- -- 示例：识别金币数量
     local goldText = Tools.recognize_number_in_range(1105,517,1196,532, "0-129", 2, 1, require('Config.TextRecognition1').文字识别库_背包, 75)
    if goldText and goldText ~= "" then
        local goldNum = tonumber(string.match(goldText, "%d+"))
        if goldNum then
            gameInfo.gold = goldNum
            print("[DEBUG] 识别到金币数量: " .. goldNum)
        end
    end
    
    -- -- 示例：识别钻石数量    
    local diamondText =  Tools.recognize_number_in_range(979,517,1040,532, "0-129", 2, 1, require('Config.TextRecognition1').文字识别库_背包, 75)
    if diamondText and diamondText ~= "" then
        local diamondNum = tonumber(string.match(diamondText, "%d+"))
        if diamondNum then
            gameInfo.diamond = diamondNum
            print("[DEBUG] 识别到钻石数量: " .. diamondNum)
        end
    end

    -- -- 识别背包负重信息
    local bagText = Tools.recognize_number_in_range(1107,43,1122,55, "C7D7DC-202020|A4B1B6-101010|2D68C4-101010|3061AE-101010|3072DA-101010",
    -1, -1, text_recognition_bag_weight, 75)
     print("背包负重信息:"..tostring(bagText))


    --识别背包格子信息
     -- 首先查找标题，获取其坐标
     local title_x, title_y = Tools.scroll_find_text(
        "背包格子",  -- 目标文字
        {x1 = 923, y1 = 117, x2 = 1206, y2 = 506},  -- 滚动区域（模拟参数，需要替换为真实参数）
        "0-102",  -- 滤镜参数（模拟参数）
        {x = 1, y = 6, width = "60-200", height = "17-18"},  -- 切割参数（模拟参数）1,6,"60-200","17-18"
        text_recognition_bag_weight
    )
    
    if title_x and title_y then
        print("找到标题'" .. title_text .. "'，坐标 (" .. title_x .. "," .. title_y .. ")")
        -- 计算按钮的坐标
        local button_x = title_x + x_offset
        local button_y = title_y + y_offset
        
        print("点击按钮，坐标 (" .. button_x .. "," .. button_y .. ")")
        tap(button_x, button_y)
        sleep(config.SLEEP_TIME)
        return true
    else
        print("未找到标题'" .. title_text .. "'")
        return false
    end
    --再次点击关闭背包
    Tools.click_button("打开背包按钮", "打开背包按钮", 1, 1106,16,1132,46, "0-185", 2, 5, require('Config.TextRecognition1').文字识别库_背包, 75)
    sleep(100)
end

-- 收集角色信息（等级、职业、命中和防御）
function M.collectCharacterInfo()
    print("[DEBUG] 收集角色信息...")
    -- 识别角色等级
    local levelText = Tools.recognize_number_in_range(6,659,57,697, "0-218", 2, 2, require('Config.TextRecognition1').文字识别库_野外挂机, 80)
    if levelText and levelText ~= "" then
        local levelNum = tonumber(levelText)
        if levelNum then
            gameInfo.level = levelNum
            print("[DEBUG] 识别到角色等级: " .. levelNum)
        end
    end          
                   --点击主界面左上角角色信息按钮
    Tools.click_button("角色信息按钮", "角色信息按钮", 1, 92,14,114,48, "0-165", 2, 5, require('Config.TextRecognition1').文字识别库_角色信息, 75)
    sleep(500)
      
            -- 识别角色职业按钮
    local profession = Tools.turing_recognizeAndReturnStr(212,281,262,299, "0-95", 2, 5, require('Config.TextRecognition1').文字识别库_角色信息, 80)
    if profession ~= nil  and profession ~= "" then
        print("[DEBUG] 识别到角色职业按钮: " .. profession)
        gameInfo.profession = profession
    end
    sleep(500)   
    Tools.click_button("查看防御命中按钮-未选中", "查看防御命中按钮-未选中", 1, 16,207,56,252, "0-43", 2, 5, require('Config.TextRecognition1').文字识别库_角色信息, 75)
    --识别命中
    local hitText = Tools.recognize_number_in_range(269,444,299,460, "0-173", 1, 1, require('Config.TextRecognition1').文字识别库_角色信息, 75)
    if hitText and hitText ~= "" then
        local hitNum = tonumber(hitText)
        if hitNum then
            gameInfo.hit = hitNum
            print("[DEBUG] 识别到命中值: " .. hitNum)
        end
    end
    print("命中值:"..tostring(hitText))
    sleep(100)
    
    --识别防御
    local defenseText = Tools.recognize_number_in_range(504,330,533,346, "0-173", 1, 1, require('Config.TextRecognition1').文字识别库_角色信息, 75)
    if defenseText and defenseText ~= "" then
        local defenseNum = tonumber(defenseText)
        if defenseNum then
            gameInfo.defense = defenseNum
            print("[DEBUG] 识别到防御值: " .. defenseNum)
        end
    end
    print("防御值:"..tostring(defenseText))
    sleep(500)  
    Tools.click_button("角色信息按钮", "角色信息按钮", 1, 92,14,114,48, "0-165", 2, 5, require('Config.TextRecognition1').文字识别库_角色信息, 75) 
end

-- 收集公会信息
function M.collectGuildInfo()
    print("[DEBUG] 收集公会信息...")
    
    local guildText = textRecognition.文字识别库_野外挂机(9) -- 假设这是识别公会名的识别库
    if guildText and guildText ~= "" then
        gameInfo.guild = guildText
        print("[DEBUG] 识别到公会名: " .. guildText)
    end
end

-- 收集地图信息
function M.collectMapInfo()
    print("[DEBUG] 收集地图信息...")
    
    local mapText = textRecognition.文字识别库_野外挂机(10) -- 假设这是识别当前地图的识别库
    if mapText and mapText ~= "" then
        gameInfo.currentMap = mapText
        print("[DEBUG] 识别到当前地图: " .. mapText)
    end
end

-- 获取完整的游戏信息
function M.getGameInfo()
    return gameInfo
end

-- 获取特定信息
function M.getGold()
    return gameInfo.gold
end

function M.getDiamond()
    return gameInfo.diamond
end

function M.getLevel()
    return gameInfo.level
end

function M.getProfession()
    return gameInfo.profession
end

function M.getDefense()
    return gameInfo.defense
end

function M.getBagInfo()
    return gameInfo.bag
end

function M.getBagWeight()
    return gameInfo.bagWeight
end

function M.getGuild()
    return gameInfo.guild
end

function M.getCurrentMap()
    return gameInfo.currentMap
end

function M.getLastUpdateTime()
    return gameInfo.lastUpdateTime
end

-- 检查信息是否需要更新（默认5分钟更新一次）
function M.shouldUpdate(interval)
    interval = interval or 300 -- 默认5分钟
    local currentTime = os.time()
    return (currentTime - gameInfo.lastUpdateTime) >= interval
end

-- 注意：UI操作相关的方法已移除，因为：
-- 1. 在心跳包中进行UI操作不合理
-- 2. 游戏信息收集应该在需要时主动调用，而不是被动更新
-- 3. 如果需要更新信息，请直接调用 collectAllInfo() 方法

-- 打印当前游戏信息
function M.printGameInfo()
    print("=== 当前游戏信息 ===")
    print("金币数量: " .. gameInfo.gold)
    print("钻石数量: " .. gameInfo.diamond)
    print("角色等级: " .. gameInfo.level)
    print("角色职业: " .. gameInfo.profession)
    print("角色防御: " .. gameInfo.defense)
    print("背包可用格子: " .. gameInfo.bag.available .. "/" .. gameInfo.bag.total)
    print("背包负重: " .. gameInfo.bagWeight)
    print("公会名: " .. gameInfo.guild)
    print("当前地图: " .. gameInfo.currentMap)
    print("最后更新时间: " .. os.date("%Y-%m-%d %H:%M:%S", gameInfo.lastUpdateTime))
    print("==================")
end

-- 导出模块
return M 